package com.xyzboom.compiler.grammar.lr

import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.module.kotlin.jsonMapper
import com.fasterxml.jackson.module.kotlin.kotlinModule
import com.xyzboom.compiler.compiler.grammar.Grammar2
import com.xyzboom.compiler.compiler.grammar.Grammar2.Companion.getGrammar2
import com.xyzboom.compiler.compiler.grammar.ISymbol
import com.xyzboom.compiler.compiler.grammar.NonTerminator
import com.xyzboom.compiler.compiler.grammar.Terminator
import com.xyzboom.compiler.compiler.grammar.Production
import com.xyzboom.compiler.compiler.grammar.Terminator.Companion.EOF
import com.xyzboom.compiler.compiler.lexer.LexerRule
import com.xyzboom.compiler.compiler.lexer.parseCode
import com.xyzboom.compiler.compiler.lr.PredictTable
import com.xyzboom.compiler.compiler.lr.generatePredictTable
import com.xyzboom.compiler.grammar.*
import com.xyzboom.compiler.fa.DFA
import com.xyzboom.compiler.fa.EdgeType.*
import com.xyzboom.compiler.fa.FAEdge
import org.junit.jupiter.api.Test

internal class PredictTableTest {
    private val jsonMapper = jsonMapper {
        kotlinModule()
    }
    private val grammarLexer =
        "[{\"name\":\"space\",\"typeName\":\"SPACE\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\" \\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\u000B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"1\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\" \\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\u000B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"string\",\"typeName\":\"STRING\",\"dfa\":{\"i\":0,\"e\":[5],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":4},\"1\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":5,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\\\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":2,\"{\\\"type\\\":\\\"2\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"2\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":3},\"3\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":5,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\\\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":2,\"{\\\"type\\\":\\\"2\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"4\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":5,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"\\\\\\\\\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":2,\"{\\\"type\\\":\\\"2\\\",\\\"value\\\":\\\"\\\\\\\"\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"letters\",\"typeName\":\"NONE\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"R\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"o\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"N\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"k\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"J\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"g\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"F\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"c\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"W\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"x\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"S\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"O\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"p\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"K\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"l\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"G\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"h\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"C\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"d\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"X\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"u\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"T\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"P\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"m\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"L\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"i\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"H\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"e\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"D\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"a\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"U\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"v\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"M\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"I\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"j\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"E\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"A\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"b\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"w\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"V\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"s\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"1\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"R\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"o\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"N\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"k\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"J\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"g\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"F\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"c\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"W\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"x\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"S\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"O\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"p\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"K\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"l\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"G\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"h\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"C\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"d\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"X\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"u\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"T\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"P\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"m\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"L\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"i\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"H\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"e\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"D\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"a\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"U\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"v\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"M\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"I\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"j\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"E\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"A\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"b\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"w\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"V\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"s\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"numbers\",\"typeName\":\"NONE\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"1\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"2\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"0\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"9\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"7\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"8\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"5\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"6\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"3\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"4\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"1\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"1\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"2\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"0\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"9\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"7\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"8\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"5\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"6\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"3\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"4\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"id\",\"typeName\":\"ID\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"R\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"o\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"N\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"k\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"J\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"g\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"F\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"c\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"_\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"W\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"x\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"S\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"O\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"p\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"K\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"l\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"G\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"h\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"C\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"d\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"X\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"u\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"T\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"P\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"m\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"L\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"i\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"H\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"e\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"D\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"a\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"U\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"v\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"M\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"I\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"j\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"E\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"A\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"b\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"w\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"V\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"s\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1},\"1\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"1\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"R\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"o\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"N\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"k\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"J\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"g\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"F\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"c\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"B\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"_\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"W\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"x\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"6\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"S\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"t\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"2\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"O\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"p\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"K\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"l\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"G\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"h\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"C\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"d\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"7\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"X\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"u\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"3\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"T\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"P\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"m\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"L\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"i\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"H\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"e\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"D\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"a\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Y\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"8\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"U\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"v\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"4\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Q\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"r\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"0\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"M\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"n\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"I\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"j\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"E\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"f\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"A\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"b\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"9\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"Z\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"w\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"5\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"V\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1,\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"s\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"colon\",\"typeName\":\"SPLIT\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\":\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"semicolon\",\"typeName\":\"SPLIT\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\";\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true},{\"name\":\"or\",\"typeName\":\"SPLIT\",\"dfa\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"type\\\":\\\"0\\\",\\\"value\\\":\\\"|\\\",\\\"@K-Class\\\":\\\"java.lang.Character\\\"}\":1}}},\"greedy\":true}]"

    //    private val grammarLexer =
//        "[{\"n\":\"space\",\"t\":\"SPACE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"\\\\t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\u000b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\" \\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"\\\\t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\u000b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\" \\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"string\",\"t\":\"STRING\",\"d\":{\"i\":0,\"e\":[5],\"m\":{\"0\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":4},\"1\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1},\"2\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":3},\"3\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1},\"4\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1}}}},{\"n\":\"letters\",\"t\":\"NONE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"numbers\",\"t\":\"NONE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"id\",\"t\":\"ID\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"_\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"_\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"colon\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\":\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"semicolon\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\";\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"or\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"|\\\",\\\"t\\\":\\\"0\\\"}\":1}}}}]"
    private val grammarGrm =
        "Grammar: Prod | Prod Grammar;\n" +
                "Prod: id colon Prod_right semicolon;\n" +
                "Prod_right: Ids | Ids or Prod_right;\n" +
                "Ids:  | id Ids;"
    private val lexer2 =
        "[{\"n\":\"space\",\"t\":\"SPACE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"\\\\t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\u000b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\" \\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"\\\\t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\u000b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"\\\\n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\" \\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"string\",\"t\":\"STRING\",\"d\":{\"i\":0,\"e\":[5],\"m\":{\"0\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":4},\"1\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1},\"2\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":3},\"3\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1},\"4\":{\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"0\\\"}\":5,\"{\\\"v\\\":\\\"\\\\\\\\\\\",\\\"t\\\":\\\"0\\\"}\":2,\"{\\\"v\\\":\\\"\\\\\\\"\\\",\\\"t\\\":\\\"2\\\"}\":1}}}},{\"n\":\"int\",\"t\":\"KEYWORD\",\"d\":{\"i\":0,\"e\":[3],\"m\":{\"0\":{\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":2},\"2\":{\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":3}}}},{\"n\":\"bool\",\"t\":\"KEYWORD\",\"d\":{\"i\":0,\"e\":[4],\"m\":{\"0\":{\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":2},\"2\":{\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":3},\"3\":{\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":4}}}},{\"n\":\"return\",\"t\":\"KEYWORD\",\"d\":{\"i\":0,\"e\":[6],\"m\":{\"0\":{\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":2},\"2\":{\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":3},\"3\":{\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":4},\"4\":{\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":5},\"5\":{\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":6}}}},{\"n\":\"semicolon\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\";\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"comma\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\",\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"leftPar\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"(\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"rightPar\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\")\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"leftBrace\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"{\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"rightBrace\",\"t\":\"SPLIT\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"}\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"letters\",\"t\":\"NONE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"numbers\",\"t\":\"NONE\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"int_number\",\"t\":\"NUMBER\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1}}}},{\"n\":\"id\",\"t\":\"ID\",\"d\":{\"i\":0,\"e\":[1],\"m\":{\"0\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"_\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1},\"1\":{\"{\\\"v\\\":\\\"U\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"4\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"r\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"8\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"v\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"M\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"j\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"0\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"n\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"e\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"D\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"i\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"H\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"a\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"u\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"T\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"3\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"y\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"X\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"7\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"m\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"L\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"q\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"P\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"d\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"C\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"h\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"G\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"t\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"S\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"2\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"x\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"W\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"6\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"l\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"K\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"p\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"O\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"c\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"B\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"g\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"F\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"_\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"5\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"s\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"R\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"9\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"w\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"V\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"k\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"J\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"1\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"o\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"N\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"E\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"b\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"I\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"f\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"Z\\\",\\\"t\\\":\\\"0\\\"}\":1,\"{\\\"v\\\":\\\"A\\\",\\\"t\\\":\\\"0\\\"}\":1}}}}]"
    private val grammarGrm2 = "Prog: | Func Prog;\n" +
            "Func: Type id leftPar rightPar leftBrace\n" +
            "    Statements\n" +
            "    rightBrace;\n" +
            "Statements: Statement | Statement Statements;\n" +
            "Statement: Expr semicolon | ReturnState | DeclareState;\n" +
            "Expr: | NonNullExpr;\n" +
            "NonNullExpr : CallExpr | id | int_number | string;\n" +
            "ReturnState: return Expr semicolon;\n" +
            "CallExpr: id leftPar ArgList rightPar;\n" +
            "ArgList: Expr | NonNullExpr comma ArgList;\n" +
            "DeclareState: Type id semicolon;\n" +
            "Type: Primitive | id;\n" +
            "Primitive: int | bool;"
    private val code2 = "int main() {\n" +
            "    int testName;\n" +
            "    bool myBool;\n" +
            "    printf(\"hello world!\", \"123\");\n" +
            "    return 0;\n" +
            "}"

    @Test
    fun test1() {
        val grammar = NonTerminator("Grammar")
        val prod = NonTerminator("Prod")
        val prodRight = NonTerminator("Prod_right")
        val ids = NonTerminator("Ids")
        val id = Terminator("id")
        val colon = Terminator("colon")
        val semicolon = Terminator("semicolon")
        val or = Terminator("or")
        val skipTokens = hashSetOf(
            "space",
        )
        val prods = arrayListOf(
            Production(grammar, arrayListOf(prod)),
            Production(grammar, arrayListOf(prod, grammar)),
            Production(prod, arrayListOf(id, colon, prodRight, semicolon)),
            Production(prodRight, arrayListOf(ids)),
            Production(prodRight, arrayListOf(ids, or, prodRight)),
            Production(ids, arrayListOf()),
            Production(ids, arrayListOf(id, ids)),
        )
        val stateMap = HashMap<Int, HashMap<FAEdge<ISymbol>, Int>>().apply {
            put(0, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(grammar, GOTO), 1)
                put(FAEdge(prod, GOTO), 2)
                put(FAEdge(id, MOVE_IN), 3)
            })
            put(1, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(EOF, REDUCE), -1)
            })
            put(2, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(grammar, GOTO), 4)
                put(FAEdge(prod, GOTO), 2)
                put(FAEdge(id, MOVE_IN), 3)
                put(FAEdge(EOF, REDUCE), 0)
            })
            put(3, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(colon, MOVE_IN), 5)
            })
            put(4, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(EOF, REDUCE), 1)
            })
            put(5, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(prodRight, GOTO), 6)
                put(FAEdge(ids, GOTO), 7)
                put(FAEdge(id, MOVE_IN), 8)
                put(FAEdge(semicolon, REDUCE), 5)
                put(FAEdge(or, REDUCE), 5)
            })
            put(6, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(semicolon, MOVE_IN), 9)
            })
            put(7, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(semicolon, REDUCE), 3)
                put(FAEdge(or, MOVE_IN), 10)
            })
            put(8, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(ids, GOTO), 11)
                put(FAEdge(id, MOVE_IN), 8)
                put(FAEdge(semicolon, REDUCE), 5)
                put(FAEdge(or, REDUCE), 5)
            })
            put(9, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(EOF, REDUCE), 2)
                put(FAEdge(id, REDUCE), 2)
            })
            put(10, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(prodRight, GOTO), 12)
                put(FAEdge(id, MOVE_IN), 8)
                put(FAEdge(ids, GOTO), 7)
                put(FAEdge(semicolon, REDUCE), 5)
                put(FAEdge(or, REDUCE), 5)
            })
            put(11, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(semicolon, REDUCE), 6)
                put(FAEdge(or, REDUCE), 6)
            })
            put(12, HashMap<FAEdge<ISymbol>, Int>().apply {
                put(FAEdge(semicolon, REDUCE), 4)
            })
        }
        val end = HashSet<Int>().apply { add(-1) }
        val dfa = DFA.fromStateMap(0, end, stateMap)
        val predictTableManual = PredictTable(prods, dfa)
        println(jsonMapper.writeValueAsString(predictTableManual))
        val predictTable = Grammar2.predictTable
//        predictTable.dfa.toGraphViz().show()

        println(jsonMapper.writeValueAsString(predictTable))
        val lexerRules: List<LexerRule> =
            jsonMapper.readerFor(object : TypeReference<List<LexerRule>>() {})
                .readValue(
                    grammarLexer
                )
        val tokens = parseCode(grammarGrm, lexerRules)
        val tokens2 = parseCode(grammarGrm2, lexerRules)
        val ast1 = predictTable.generatorAST(tokens, skipTokens)
//        ast1.toGraphViz().show()
        val grmAst2 = predictTable.generatorAST(tokens2, skipTokens)
//        ast2.toGraphViz().show()
        val g1 = ast1.getGrammar2()
        println(g1.productions.joinToString("\n"))
        val g2 = grmAst2.getGrammar2()
        println(g2.productions.joinToString("\n"))
        val pt1 = g1.generatePredictTable()
//        pt1.dfa.toGraphViz().show()
        val myAst1 = pt1.generatorAST(tokens, skipTokens)
//        myAst1.toGraphViz().show()
//        ast2.toGraphViz().show()
    }
}